#ifndef BASE_SYSTEM_LOG_COMMON_INCLUDE_SYSTEM_LOG_CONFIG_H
#define BASE_SYSTEM_LOG_COMMON_INCLUDE_SYSTEM_LOG_CONFIG_H

#include <cstddef>
#include <cstdint>

namespace Base {
namespace SystemLog {
constexpr size_t DEFAULT_CACHE_LINE_SIZE = 64; // 64位机器缓存行大小为64字节，后期可根据系统自动调整
constexpr size_t DEFAULT_BUFFER_SIZE = 4 * 1024 * 1024; // 每个缓存节点4MB
constexpr size_t DEFAULT_MAX_BUFFER_NODES = 100; // 最大一百个节点 即缓存池 400MB
constexpr uint32_t DEFAULT_FLUSH_INTERVAL_MS = 1000; // 每1秒交换1次前后端缓存池
constexpr size_t DEFAULT_SOFT_FLUSH_THRESHOLD = DEFAULT_MAX_BUFFER_NODES * DEFAULT_BUFFER_SIZE / 2; // 缓存达到缓存池50%时软刷新
constexpr size_t DEFAULT_HARD_FLUSH_THRESHOLD = DEFAULT_MAX_BUFFER_NODES * DEFAULT_BUFFER_SIZE * 95 / 100; // 缓存达到缓存池95%时强制刷新
constexpr int32_t DEFAULT_MAX_RETRY_TIMES = 100; // 最大重试次数
constexpr size_t DEFAULT_MAX_FILE_SIZE = 100 * 1024 * 1024; // 日志文件最大100MB
#ifdef _WIN32
constexpr size_t DEFAULT_DIRECT_IO_ALIGNMENT = 4096; // Windows通常使用4KB对齐
#else
constexpr size_t DEFAULT_DIRECT_IO_ALIGNMENT = 512; // Linux通常使用512字节对齐
#endif
constexpr size_t DEFAULT_DIRECT_IO_BUFFER_SIZE = 64 * 1024; // 64KB缓冲区
constexpr uint32_t DEFAULT_ASYNC_FSYNC_INTERVAL_MS = 5000; // 每5秒进行一次异步文件系统同步
} // namespace SystemLog
} // namespace Base

#endif // BASE_SYSTEM_LOG_COMMON_INCLUDE_SYSTEM_LOG_CONFIG_H